iT邦幫忙

2024 iThome 鐵人賽

DAY 18
0
佛心分享-SideProject30

從卡關到通關的Spring Boot 腦內風暴系列 第 18

建構函數作用 vs 建構無參函數的必要

  • 分享至 

  • xImage
  •  

在建立對象時,常會使用建構函數Constructor,它能決定該對象如何初始化,不過建構函數又分成有帶參跟沒帶參,究竟什麼時候該用哪種?作用上又有什麼差異?
雖然建構函數看起來是基本Java語法,但在Spring Boot等框架中,對象的創建與初始化往往依賴建構函數,因此了解其應用對於開發非常重要唷!

帶參建構函數Parameterized Constructor

帶參建構函數,可以在創建對象時,直接初始化該對象的屬性,確保每個對象都帶有必要的屬性,減少後續額外設置的情形。

public class Task {
    private String taskName;
    
    public Task(String taskName) {
        this.taskName = taskName;
    }
}

上述代表在創建Task對象時,必須傳遞taskName,確保每個Task都有名稱,避免屬性為空之情形。

  • 強制初始化:保證對象創建時即有必要屬性值,不用後續手動設置。
  • 減少錯誤:減少因屬性未設置而產生潛在錯誤。

無參建構函數No-Args Constructor

無參建構函數又稱為默認建構函數,允許創建對象時不指定初始值,可增加靈活度。

  • 框架需求
    Spring、Hibernate等這些框架通常是依賴無參建構函數來創建對象,因為這些框架是使用映射機制創建對象。
    例如Spring在加載bean時,會透過無參建構函數來實例bean,並使用setter或其他依賴注入來設置屬性。
public class Task {
    private String taskName;
    private String taskDesc;
    
    // 無參建構函數,Spring框架要求
    public Task() {
    }
    
    // 帶參建構函數
    public Task(String taskName, String taskDesc) {
        this.taskName = taskName;
        this.taskDesc = taskDesc;
    }
    
    // Setter/Getter
}

  • 靈活性
    無參建造函數能使對象創建後,再進行初始化,延遲設置。例如可先創建空的Task,後續依其需求設置屬性。
Task task = new Task();
task.setTaskName("Report");

綜合上述,帶參建構函數,適合用於對象創建時就確定所有屬性,避免後續設置的麻煩;
無參建構函數則適合需要靈活創建對象的場景,特別是在框架(如Spring、Hibernate),無參建構函數是必須的,允許對象創建後再初始化,適用於依賴框架自動注入屬性或需要延遲設置屬性的情況。
這些建構函數的選擇,可根據Java框架以及業務需求來進行設計選擇。


上一篇
null就用容器保存起來?—Optional 說明
下一篇
滾來滾去-事務回滾的重要性
系列文
從卡關到通關的Spring Boot 腦內風暴30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言